from rest_framework.views import APIView
from rest_framework.response import Response
from .sers import *


# 广告接口开发

class IndexView(APIView):

    def get(self, request):
        # 查询广告，我们广告是有类型的，根据不同的分类，查询各自的广告

        # 找到所有的轮播广告，取前四个
        queryset1 = Advert.objects.filter(cate_id=1)[:4]
        # 根据分类 找 快讯广告
        queryset2 = Advert.objects.filter(cate_id=2)[:7]
        # 根据 图片广告分类 查询
        queryset3 = Advert.objects.filter(cate_id=3)[:1]

        # 获取所有的分类组，
        group_queryset = CategoryGroup.objects.all()
        # 获取组下的一级分类

        ser = CategoryGroupSer(group_queryset, many=True)

        resp = {
            "list1": AdvertSer(queryset1, many=True).data,
            "list2": AdvertSer(queryset2, many=True).data,
            "list3": AdvertSer(queryset3, many=True).data,
            "group_list": ser.data,
        }

        return Response(resp)


class IndexGoodsView(APIView):
    def get(self, request):
        # 查询到所有的一级分类

        queryset = Category.objects.filter(level=1)

        ser = CategorySer1(queryset, many=True)

        # 查询一级分类下对应的商品
        # data = []
        # for cate in queryset:
        #     goods_queryset = Goods.objects.filter(category1_id=cate.id)[:10]
        #     temp = {
        #         "cate": CategorySer(cate).data,
        #         "goods_list": GoodsSer(goods_queryset, many=True).data
        #     }
        #     data.append(temp)

        return Response(ser.data)


# 导入 django自带的 分页器类Paginator
from django.core.paginator import Paginator


class GoodsListView(APIView):

    def get(self, request):

        # 获取页码

        num = request.GET.get("num", 1)  # 如果没有传递页码 表示返回第一页

        # 一页几条记录
        size = 2

        # 获取到 传递来的 分类ID
        cid = request.GET.get("cid")

        # 获取一个 标识，来表示是根据价格排序、还是人气排序
        flag = request.GET.get("flag")  # 1 表示按照价格排序  2 表示按照人气排序  其他情况默认排序
        if flag == '1':
            queryset = Goods.objects.filter(category1_id=cid).order_by("price")
        elif flag == '2':
            queryset = Goods.objects.filter(category1_id=cid).order_by("-sale")
        else:
            # 查询该分类下的所有商品 默认排序
            queryset = Goods.objects.filter(category1_id=cid)

        # 根据分页器类 创建 一个分页器
        paginator = Paginator(queryset, size)  # 分页器 要想实现分页 需要两个参数， 参1:总记录数据  参2：一页大小
        # 从分页器中 可以拿到很多东西
        # # 可以获取到 总页数
        # print(paginator.num_pages)
        # # 可以获取到记录总个数
        # print(paginator.count)
        # # 可以获得页码范围
        # print(paginator.page_range)
        # # 可以根据页码获取本页数据
        # print(paginator.page(2))
        # 根据页码 获取本页数据
        page_data = paginator.page(num)
        resp = {
            "data": GoodsSer(page_data, many=True).data,
            "total": paginator.count,
            "size": size
        }
        # 返回一页数据

        return Response(resp)


# 开发商品详情
class GoodsInfoView(APIView):

    def get(self, request, pk):
        # 获取该商品
        goods = Goods.objects.get(id=pk)
        ser = GoodsInfoSer(goods)
        return Response(ser.data)

# 设计出 商品浏览记录

